Bug 553578 - tabs are not drawn correctly
authorMatthias Clasen <mclasen@redhat.com>
Fri, 26 Sep 2008 23:58:12 +0000 (23:58 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Fri, 26 Sep 2008 23:58:12 +0000 (23:58 +0000)
2008-09-26  Matthias Clasen  <mclasen@redhat.com>

        Bug 553578 - tabs are not drawn correctly

        * gtk/gtknotebook.c: Track the visibility state of notebook tabs
        between allocations so that we know to redraw the tab labels if
        tabs are hidden and shown without changing position.
        Reported by Marek Kašík, patch by Owen Taylor.

svn path=/trunk/; revision=21525

ChangeLog
gtk/gtknotebook.c

index 38d7ab8e7fe1cef9cd21aa760f06b23dda1ee93c..2f4c78feff44139a5315d85e66cfcf5262bb94d6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2008-09-26  Matthias Clasen  <mclasen@redhat.com>
+
+       Bug 553578 - tabs are not drawn correctly
+
+       * gtk/gtknotebook.c: Track the visibility state of notebook tabs 
+       between allocations so that we know to redraw the tab labels if 
+       tabs are hidden and shown without changing position. 
+       Reported by Marek Kašík, patch by Owen Taylor.
+
 2008-09-26  Matthias Clasen  <mclasen@redhat.com>
 
        Bug 553133 – GtkFileChooser won't ask to mount a volume
index e09a0060bee69195fc732690bfc119bc5f9214fe..1f3ad2494c18cfdad2f07b0d13b3b66b16da4d3c 100644 (file)
@@ -153,6 +153,11 @@ struct _GtkNotebookPage
   guint reorderable  : 1;
   guint detachable   : 1;
 
+  /* if true, the tab label was visible on last allocation; we track this so
+   * that we know to redraw the tab area if a tab label was hidden then shown
+   * without changing position */
+  guint tab_allocated_visible : 1;
+
   GtkRequisition requisition;
   GtkAllocation allocation;
 
@@ -5556,9 +5561,15 @@ gtk_notebook_page_allocate (GtkNotebook     *notebook,
   gint tab_curvature;
   gint tab_pos = get_effective_tab_pos (notebook);
   gboolean tab_allocation_changed;
+  gboolean was_visible = page->tab_allocated_visible;
 
-  if (!page->tab_label)
-    return FALSE;
+  if (!page->tab_label ||
+      !GTK_WIDGET_VISIBLE (page->tab_label) ||
+      !gtk_widget_get_child_visible (page->tab_label))
+    {
+      page->tab_allocated_visible = FALSE;
+      return was_visible;
+    }
 
   xthickness = widget->style->xthickness;
   ythickness = widget->style->ythickness;
@@ -5630,6 +5641,12 @@ gtk_notebook_page_allocate (GtkNotebook     *notebook,
 
   gtk_widget_size_allocate (page->tab_label, &child_allocation);
 
+  if (!was_visible)
+    {
+      page->tab_allocated_visible = TRUE;
+      tab_allocation_changed = TRUE;
+    }
+
   return tab_allocation_changed;
 }